package com.gagakuai.bpm.service.camunda;



import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gagakuai.bpm.domian.dto.camunda.*;
import com.gagakuai.bpm.domian.entity.camuda.*;
import com.gagakuai.bpm.domian.query.camunda.WorkflowQuery;
import com.gagakuai.bpm.domian.vo.camunda.ActivityNodeVO;
import org.camunda.bpm.engine.history.HistoricProcessInstance;

import java.util.List;

/*
 * bpm
 */
public interface WorkflowTaskService {

    /*
     * 获取启动表单数据
     *
     * @param pdId 流程定义ID
     * @return 表单数据
     */
    WorkflowFormData getStartFormData(String pdId);

    /*
     * 获取任务表单
     *
     * @param taskId 任务ID
     * @return 任务表单
     */
    WorkflowFormData getTaskFormData(String taskId);

    /*
     * 启动流程
     *
     * @param dto 流程变量
     */
    String startProcess(String key, WorkflowVariableDto dto) throws Exception;

    /*
     * 获取我发起过的流程
     *
     * @param workflowQueryDto 分页请求
     * @return 分页条件
     */
    List<HistoricProcessInstance> getMyProcessInstances(WorkflowQuery workflowQueryDto);

    /*
     * 获取流程总数
     *
     * @param key 流程定义key
     */
    String getProcessInstanceNum(String key);

    /*
     * 根据流程实例的ID获取活动节点
     *
     * @param proInsId 实例ID
     * @return 节点数据
     */
    WorkflowNodesDto getNodeIds(String proInsId);

    /*
     * 查询待办任务
     *
     * @param workflowQueryDto 查询条件
     * @return 我的任务
     */
    List<WorkflowTaskEntity> getTodoTaskList(WorkflowQuery workflowQueryDto);

    /*
     * 查询已办任务
     *
     * @param workflowQueryDto 查询条件
     * @return 我的任务
     */
    List<WorkflowTaskEntity> getCompleteTaskList(WorkflowQuery workflowQueryDto);

    /*
     * 认领任务
     *
     * @param taskId    任务ID
     * @param claimUser 认领人
     */
    void claimTask(String taskId, String claimUser);

    /*
     * 任务委托
     *
     * @param taskId         任务ID
     * @param delegationUser 任务委派者
     */
    void delegateTask(String taskId, String delegationUser, ActHiComment actHiComment);

    /*
     * 完成任务
     *
     * @param taskId 任务ID
     * @param dto    流程任务变量
     */
    String completeTask(String taskId, WorkflowVariableDto dto, UserInfo userInfo);

    /*
     * 完成任务
     *
     * @param taskId 任务ID
     * @param dto    流程任务变量
     */
    String rejectTask(String taskId, WorkflowVariableDto dto, UserInfo userInfo);

    /*
     * 撤销
     *
     * @param taskId 任务ID
     * @param dto    流程任务变量
     */
    String withDrawTask(String taskId, WorkflowVariableDto dto, UserInfo userInfo);


    /*
     * 获取高亮节点信息
     *
     * @param processInsId 流程实例ID
     */
    CamundaHighLineDTO getHighlightNode(String processInsId, String authorId);

    /*
     * 审核不通过
     *
     * @param processInstanceId 流程实例ID
     * @param taskId            任务ID
     * @param reason            原因
     */
    boolean reject(String processInstanceId, String taskId, String reason, int step);

    /*
     * @param processInstanceId 流程实例ID
     * @return 返回列表Comment
     */
    List<CommentDto> tableContent(String processInstanceId);


    /*
     * 知会
     *
     * @param inform 参数
     * @return 返回状态
     */
    boolean inform(Inform inform);

    /*
     * 取回
     *
     * @return 返回状态
     */
    int fetchBack(String procId, UserInfo userInfo);

    /*
     * 撤销
     *
     * @return 返回状态
     */
    int withDraw(String procId, UserInfo userInfo) throws Exception;

    /*
     * 手动知会
     *
     * @param taskId    当前任务ID
     * @param assignees 支会的人列表
     * @return 返回情况
     */
    String handleInfo(String taskId, String assignees);

    /*
     * 知会已阅 2
     *
     * @param taskId 任务ID
     * @param reason 填写说明
     * @return 返回状态
     */
    String readed(String taskId, String reason);

    /*
     * 返回流程节点信息
     *
     * @param procId 流程实例ID
     * @return 返回节点列表信息
     */
    List<ActivityNodeVO> getActivityNodeList(String procId);


    /*
     * 查询待办任务
     *
     * @param workflowQueryDto 查询条件
     * @return 我的任务
     */
    IPage<WorkflowTaskEntityNew> getTodoTaskListByUser(WorkflowQuery workflowQueryDto);


    /*
     * 查询已办任务
     *
     * @param workflowQueryDto 查询条件
     * @return 我的任务
     */
    IPage<WorkflowTaskEntityNew> getCompleteTaskListByUser(WorkflowQuery workflowQueryDto);


    /*
     * 获取工作流定义
     */
    WorkflowDefinetion getBpmDefineBinaryFile(String workflowdefinKey) throws Exception;


    /*
     * 转办理
     */
    void tansforTask(String taskId, String delegationUser);


    /*
     * 退回到上一步流程
     */
    int processDrawToLastStep(String processId, ActHiComment actHiComment) throws Exception;


    /*
     * 退回重填
     */
    int processDrawToStart(String processInstanceId, ActHiComment actHiComment);


    /*
     * 取回
     */
    int processReturn(String processInstanceId, ActHiComment actHiComment);


    /*
     * 获取高亮任务Id
     *
     */
    String getHighlight(String processId);


    /*
     * 加签
     */
    String addInstance(String processInstanceId, WorkflowVariableDto dto) throws Exception;


    /*
     * 根据流程实列获取当前活跃的实列数目
     */
    Integer getRutaaskNumByProcessIns(String processId,String taskDefKey);

    /*
     * 根据流程实列删除当前活跃的实列数目
     */
    Integer deleteRutaaskNumByProcessIns(String processId);


    /*
     * 根据流程实列删除当前活跃的实列数目
     */
    Integer deleteRutaaskNumByProcessIns(List<String> processIdList);


    /*
     * 根据流程实列获取档当前所有的List
     */
    List<ActRuTask> getRuTaskByProcIns(String procInstId);

    /*
     * 根据任务id删除历史记录
     */
    int deleteHitaaskNumByProcessIns(List<String> taskIdList);


    /*
     * 根据任务id获取数量
     */
    int getNumByTaskId(String taskId);

    /*
    *
    *  ge
    */
    String getTaskDefKeyBytaskId(String taskId);
}
